package nancal.mp.db.mongo.entity.log

import nancal.mp.db.mongo.MobileCodeModuleEnum
import nancal.mp.db.mongo.base.wx.OpenIdName
import nancal.mp.db.mongo.base.wx.OpenIdNameUrl
import nbcp.base.comm.JsonMap
import nbcp.base.db.IdName
import nbcp.base.db.IdNameUrl
import nbcp.base.db.annotation.DbEntityGroup
import nbcp.base.model.BaseMarkEntity
import nbcp.base.utils.CodeUtil
import org.springframework.data.mongodb.core.mapping.Document
import java.time.LocalDateTime


@Document
@DbEntityGroup("log")
data class OrderLog(
    var orderId: String = "",
    var msg: String = "",
    var beforeData: JsonMap = JsonMap(),    //改变前的数据
    var afterData: JsonMap = JsonMap(),     //变化后的数据
    var createBy: OpenIdName = OpenIdName()
) : BaseMarkEntity()


//提现记录
@Document
@DbEntityGroup("log")
data class WithdrawalLog(
    var code: String = CodeUtil.getCode(),
    var user: OpenIdNameUrl = OpenIdNameUrl(),     //包含头像信息  openid 和  name  logo 三个  头像用于后台
    var amount: Int = 0,                 //提现金额  仅支持整数
    var bankName: String = "",          //银行全称
    var bankNumber: String = "",        //尾号
    var bankZhiName: String = "",       //支行名称
    var remark: String = "",            //备注
    var done: Boolean = false
) : BaseMarkEntity()

@Document
@DbEntityGroup("log")
data class CorpLoginLog(
    var loginName: String = "",
    var password: String = "", //有密码，表示登录失败
    var app: String = "", //Header 中的 App。
    var clientIp: String = "",
    var client: String = "",
    var remark: String = ""
) : BaseMarkEntity()


//@Document
//@DbEntityGroup("log")
//data class MqLog(
//    var name: String = "",
//    var arrivedAt: LocalDateTime? = null,      //到达Exchange时间
//    var body: String = "",  //消息内容。
//    var sendErrorMessage: String = "", //消息未到达的消息.
//    var isDone: Boolean = false, //是否完成。
//    var consumeAt: LocalDateTime? = null,
//    var result: String = ""    //消费结果，成功为空。
//) : BaseMarkEntity()


@Document
@DbEntityGroup("log")
data class EmailCodeLog(
    var module: MobileCodeModuleEnum? = null,        //使用模块
    var emails: MutableList<String> = mutableListOf(),
    var subject: String = "",
    var content: String = "",
    var isRead: Boolean = false,
) : BaseMarkEntity()


@Document
@DbEntityGroup("log")
data class MobileCodeLog(
    var module: MobileCodeModuleEnum? = null,        //使用模块
    var mobile: String = "",
    var templateCode: String = "",
    var param: String = "",

    var bizId: String = "",          // 下发的回执Id.用它来查询状态.,有它表示发过.
    var result: Any? = null,        //下发的错误消息
    var errorMessage: String = "",
    var sentAt: LocalDateTime? = null,      // 下发时间
    var arrivedAt: LocalDateTime? = null,   //到达时间

) : BaseMarkEntity() {
}


/**
 * 记录小程序启动日志。
 * https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html
 */
@Document
@DbEntityGroup("log")
data class WxStartLog(
    var path: String = "", //  启动小程序的路径 (代码包路径)
    var scene: Int = 0,      //启动小程序的场景值
    var query: Any? = null,  //启动小程序的 query 参数
    var shareTicket: String = "", //
    var referrerInfo: Any? = null, //来源信息。从另一个小程序、公众号或 App 进入小程序时返回。
    var openid: String = "", //当前操作人openId
    var userName: String = ""  //用户姓名
) : BaseMarkEntity()


//@Document
//@DbEntityGroup("log")
//data class TraceLog(
//    var method: String = "",
//    var url: String = "",
//    var header: MutableMap<String, String> = mutableMapOf<String, String>(),
//    var body: String = "",   //请求体
//    var remark: String = "",    //分析结果
//    var user: IdName = IdName()
//) : BaseMarkEntity()


/**
 * 分享日志
 */
//@Document
//@DbEntityGroup("log")
//data class ShareProductLog(
//    var sharer: IdNameUrl = IdNameUrl(),
//
//    var product: IdNameUrl = IdNameUrl(),
//    var message: String = ""         //分享给我的消息
//) : BaseMarkEntity()


//@Document
//@DbEntityGroup("log")
//data class ShareArticleLog(
//    var sharer: IdNameUrl = IdNameUrl(),
//    var article: IdName = IdName(),          //送我的券
//    var message: String = ""         //分享给我的消息
//) : BaseMarkEntity()

//@Document
//@DbEntityGroup("log")
//data class ShareCouponLog(
//    var sharer: IdNameUrl = IdNameUrl(),
//    var coupon: IdName = IdName(),     //分享给我的是 文章
//    var message: String = ""           //分享给我的消息
//) : BaseMarkEntity()


//@Document
//@DbEntityGroup("log")
//data class ActivityProductLog(
//    var activity: IdName = IdName(),
//    var product: IdNameUrl = IdNameUrl(),
//    var corp: IdName = IdName(),
//    var cause: String = "",                 //失效原因
//    var startAt: LocalDateTime? = null,
//    var endAt: LocalDateTime? = null
//) : BaseMarkEntity()

